﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Xml.Serialization;
using System.IO;

namespace MVCTippSpielManagement.Utilities
{
	public class Util
	{
		public static string GetMD5Hash(string textToHash)
		{
			if (String.IsNullOrEmpty(textToHash))
			{
				return String.Empty;
			}

			MD5 md5 = new MD5CryptoServiceProvider();
			byte[] tth = Encoding.Default.GetBytes(textToHash);
			byte[] res = md5.ComputeHash(tth);

			string result = System.BitConverter.ToString(res);
			return result.Replace("-", "").ToLower();
		}

		public static bool SendMail(string to, string subject, string content)
		{
			return true;
		}

		/// <summary>        
		/// Generische Methode zum serialisieren eines bestimmtes Types in einer Xml Datei.        
		/// </summary>        
		/// <typeparam name="T">Der Type welcher serialisiert werden soll.</typeparam>        
		/// <param name="filename">Der Pfad zu der Xml Datei in welcher die serialisierten Daten gespeichert werden sollen.</param>        
		/// <param name="instance">Die Instanz der Klasse vom Typ T welche serialisiert werden soll.</param>  
		///
		/// Beispiel:
		/// Speichern            
		/// moo m = new moo() 
		/// { Name = "Hallo" };           
		/// dotNetBase.genericSerializer.Serialize<moo>(@"C:\Users\Maximilian\Desktop\test.xml", m);
		public static void Serialize<T>(string filename, T instance)
		{
			XmlSerializer serializer = new XmlSerializer(typeof(T));
			using (StreamWriter writer = new StreamWriter(filename, false, Encoding.UTF8))
			{
				serializer.Serialize(writer, instance);
			}
		}

		/// <summary>        
		/// Generische Methode zum deserialisieren eines bestimmtes Types aus einer Xml Datei.        
		/// </summary>       
		/// 
		/// <typeparam name="T">Der Type welcher deserialisiert werden soll.</typeparam>      
		/// 
		/// <param name="filename">Der Pfad zu der zuvor serialisierten Xml Datei welche deserialisiert werden soll.</param>      
		/// 
		/// <param name="instance">Die Instanz der Klasse in welche die deserialisierten Daten geschrieben werden sollen.</param>       

		/// Beispiel:
		/// Laden 
		/// moo m2 = new moo();            
		/// dotNetBase.genericSerializer.Deserialize<moo>(@"C:\Users\Maximilian\Desktop\test.xml", out m2);        
		public static void Deserialize<T>(string filename, out T instance)
		{
			XmlSerializer serializer = new XmlSerializer(typeof(T)); 
			using (StreamReader reader = new StreamReader(filename))
			{
				instance = (T)serializer.Deserialize(reader);
			}
		}
	}
}
